home *** CD-ROM | disk | FTP | other *** search
- 1 GOTO10000:REM COMMODORE 64 LIBRARY COPYRIGHT(C) ANDREW COLIN 1983
- 1000 REM CONVERT X1 TO BINARY AND DISPLAY
- 1010 YY=256:XX=X1:FORKK=1TO8
- 1020 YY=YY/2
- 1030 IFXX>=YYTHENXX=XX-YY:PRINT"*";:GOTO1050
- 1040 PRINT" ";
- 1050 NEXTKK
- 1060 PRINT:RETURN
- 4100 REM EXTRACT SURNAME FROM N1$ AND DELIVER IN Y1$
- 4110 JJ=LEN(N1$)
- 4120 IFJJ=0THENY1$="":RETURN
- 4130 IFMID$(N1$,JJ,1)<"A"ORMID$(N1$,JJ,1)>"[218]"THENJJ=JJ-1:GOTO4120
- 4140 FORKK=JJTO1STEP-1
- 4150 CC$=MID$(N1$,KK,1)
- 4160 IFNOT(CC$>="A"ANDCC$<="Z"ORCC$="-"ORCC$="'")THEN4190
- 4170 NEXTKK
- 4180 KK=0
- 4190 Y1$=MID$(N1$,KK+1,JJ-KK)
- 4200 RETURN
- 4500 REM TOLERANT INPUT OF NUMBERS
- 4510 INPUT XX$
- 4520 YY$=""
- 4530 FORJJ=1TOLEN(XX$)
- 4540 CC$=MID$(XX$,JJ,1)
- 4550 IFCC$="O"THENYY$=YY$+"0":GOTO4600
- 4560 IFCC$="I"THENYY$=YY$+"1":GOTO4600
- 4570 IFCC$=" "THEN4600
- 4580 IFNOT(CC$<="9"ANDCC$>="0"ORCC$="."ORCC$="-")THEN4620
- 4590 YY$=YY$+CC$
- 4600 NEXTJJ
- 4610 X1=VAL(YY$):RETURN
- 4620 PRINT"NUMBERS CONSIST OF"
- 4630 PRINT"DECIMAL DIGITS 0-9,"
- 4640 PRINT"+,- AND . ONLY"
- 4650 PRINT"PLEASE TRY AGAIN"
- 4660 GOTO4510
- 5000 REMDISPLAY X1 TO Y1 DECIMAL PLACES
- 5010 XX=X1:IFY1>0 AND ABS(X1)<=999999999THEN 5050
- 5020 XX=XX+0.5
- 5030 PRINT INT(XX);
- 5040 RETURN
- 5050 IFXX<0THENXX=XX-0.5*10^-Y1:GOTO5070
- 5060 XX=XX+0.5*10^-Y1
- 5070 NN$=STR$(XX)
- 5080 FORPP=1TOLEN(NN$)
- 5090 IFMID$(NN$,PP,1)="."THEN PRINT LEFT$(NN$,PP+Y1);:RETURN
- 5100 NEXTPP
- 5110 PRINTNN$;".";
- 5120 FORJJ=1TOY1:PRINT"0";:NEXTJJ
- 5130 RETURN
- 5500 REM REDUCE FRACTION A1/B1 TO ITS LOWEST TERMS
- 5510 REM RESULT IN C1/D1. LOCALS ARE JJ,KK,LL
- 5520 REM ERROR IF A1 OR B1 NOT WHOLE NUMBERS OR IF B1<1
- 5530 IFA1=INT(A1)ANDB1=INT(B1)ANDB1>1THEN5550
- 5540 PRINT"WRONG PARAMETERS TO FRACTION SIMPLIFIER";A1;B1:STOP
- 5550 IFA1=0THENC1=0:D1=1:RETURN
- 5560 JJ=A1:KK=B1
- 5570 IFA1<0THENJJ=-A1
- 5580 IFKK=0THEN 5620
- 5590 IFJJ=0 THENJJ=KK:GOTO5620
- 5600 IFJJ>KKTHENJJ=JJ-INT(JJ/KK)*KK:GOTO5580
- 5610 KK=KK-INT(KK/JJ)*JJ:GOTO5580
- 5620 C1=A1/JJ:D1=B1/JJ
- 5630 RETURN
- 5700 REM DISPLAY X1$ WITHOUT SPLITTIOING WORDS
- 5710 XX$=X1$
- 5720 PP=LEN(XX$)
- 5730 IFPP<=40THEN RR=PP:GOSUB5780:RETURN
- 5740 FORQQ=41TO1STEP-1
- 5750 IFMID$(XX$,QQ,1)=" "THENRR=QQ-1:GOSUB5780:XX$=RIGHT$(XX$,PP-QQ):GOTO5720
- 5760 NEXTQQ
- 5770 RR=40:GOSUB5780:XX$=RIGHT$(XX$,PP-40):GOTO5720
- 5780 REM INTERNAL SUBROUTINE
- 5790 PRINTLEFT$(XX$,RR);:IFRR<40THENPRINT
- 5800 RETURN
- 6000 REM SEARCH ORDERED LIST IN A1$
- 6005 HH=H1:LL=L1
- 6010 IFHH<LLTHENM1=-1:RETURN
- 6020 M1=INT(0.5*(HH+LL))
- 6030 IFX1$=A1$(M1)THENRETURN
- 6040 IFX1$<A1$(M1)THENHH=M1-1:GOTO6010
- 6050 LL=M1+1:GOTO6010
- 6200 REM QUICKSORT OF N1 NUMBERS IN ARRAY A1
- 6210 IFSS=1THEN6230
- 6220 DIMSS%(100):SS=1:REM DECLARE STACK
- 6230 AA=1:BB=N1:SS%(0)=1:PP=1
- 6240 XX=AA:YY=BB:ZZ=A1(BB)
- 6250 IFXX>=YYTHEN6290
- 6260 IFA1(XX)<=ZZTHENXX=XX+1:GOTO6250
- 6270 IFA1(YY)>=ZZTHENYY=YY-1:GOTO6250
- 6280 DD=A1(YY):A1(YY)=A1(XX):A1(XX)=DD:GOTO6250
- 6290 A1(BB)=A1(XX):A1(XX)=ZZ
- 6300 IFXX-AA<=1THEN6340
- 6310 SS%(PP)=XX:SS%(PP+1)=BB:SS%(PP+2)=2:PP=PP+3
- 6320 BB=XX-1:GOTO6240
- 6330 PP=PP-3:XX=SS%(PP):BB=SS%(PP+1)
- 6340 IFBB-XX<=1THEN6370
- 6350 SS%(PP)=3:PP=PP+1:AA=XX+1:GOTO6240
- 6360 PP=PP-1
- 6370 ONSS%(PP-1)GOTO6380,6330,6360
- 6380 RETURN
- 6500 REM BUBBLE SORT
- 6510 SS$="NO"
- 6520 FORKK=1TON1-1
- 6530 IFA1$(KK)>A1$(KK+1)THENDD$=A1$(KK):A1$(KK)=A1$(KK+1):A1$(KK+1)=DD$:SS$="YES"
- 6540 NEXTKK
- 6550 IFSS$="YES"THEN6510
- 6560 RETURN
- 7000 REM ROBUST NUMBER INPUT
- 7010 XX$="":PP=0
- 7020 GETAA$:IFAA$=""THEN7020
- 7030 IFAA$>="0"ANDAA$<="9"THENPRINTAA$;:XX$=XX$+AA$:PP=PP+1:GOTO7020
- 7040 IFASC(AA$)<>20THEN7070:REM LOOK FOR DEL
- 7050 IFPP=0THEN7020:REM CAN'T ERASE NOTHING!
- 7060 PRINT"[157] [157]";:PP=PP-1:XX$=LEFT$(XX$,PP):GOTO7020
- 7070 IFASC(AA$)<>13THEN 7020:REMLOOK FOR RETURN
- 7080 IFPP=0THEN7020
- 7090 X1=VAL(XX$):RETURN
- 8000 REM DISPLAY CHARACTER IN A1$ FOUR TIMES USUAL SIZE
- 8010 BB=ASC(A1$)
- 8020 IFBB=13ORBB=141THEN PRINT"":RETURN
- 8030 IFBB=18THENQQ=1:RETURN
- 8040 IFBB=146THENQQ=0:RETURN
- 8050 IFBB<32THENPRINTMID$("[146][146][146][146][146][146][146][146][146][146][146][146][146][146][146][146] [146][146][146][146][146][146][146][146][146][146]",BB+1,1);:RETURN
- 8060 IFBB>=144 AND BB<160THENPRINTMID$("[144][146][146][147][146][146][146] [146][146][146][146][156][146][158][159]",BB-143,1);:RETURN
- 8070 AA=(BBAND31)+0.5*(BBAND128):IF(BBAND64)=0THENAA=AA+32
- 8080 FORJJ=0TO6STEP2
- 8085 POKE 56334,PEEK(56334)AND 254:POKE 1,PEEK(1) AND 251
- 8090 KK=PEEK(53248+8*AA+JJ):LL=PEEK(53249+8*AA+JJ)
- 8095 POKE 1,PEEK(1) OR 4:POKE 56334,PEEK(56334) OR 1
- 8100 NN=64:FORMM=0TO3
- 8110 PP=1+8*INT(KK/NN)+2*INT(LL/NN)
- 8120 KK=KK-INT(KK/NN)*NN:LL=LL-INT(LL/NN)*NN
- 8130 IFQQ=0THENPRINTMID$("[146] [146][172][146][187][146][162][146][188][161][191][190][146][190][146][191][146][161][188][162][187][172] ",PP,2);:GOTO8150
- 8140 PRINTMID$(" [172][187][162][188][146][161][146][191][146][190][190][191][161][146][188][146][162][146][187][146][172][146] ",PP,2);
- 8150 NN=INT(NN/4):NEXTMM
- 8160 PRINT"[157][157][157][157]";
- 8170 NEXTJJ
- 8180 PRINT"[145][145][145][145]";
- 8190 IF PEEK(211)>36THENPRINT""
- 8200 RETURN
- 9000 REM SOLVE N1 SIMULTANEOUS EQUATIONS A1.X1=B1
- 9010 IFN1=1THENX1(1)=B1(1)/A1(1,1):RETURN
- 9020 FORJJ=1TON1-1:REM FIND PIVOT
- 9030 DD=ABS(A1(JJ,JJ)):LL=JJ
- 9040 FORKK=JJTON1
- 9050 IFABS(A1(KK,JJ))>DDTHENDD=ABS(A1(KK,JJ)):LL=KK
- 9060 NEXTKK
- 9070 IFLL=JJTHEN9120
- 9080 FORKK=JJTON1
- 9090 DD=A1(JJ,KK):A1(JJ,KK)=A1(LL,KK):A1(LL,KK)=DD
- 9100 NEXTKK
- 9110 DD=B1(JJ):B1(JJ)=B1(LL):B1(LL)=DD
- 9120 FORKK=JJ+1TON1:DD=A1(KK,JJ)/A1(JJ,JJ)
- 9130 FORLL=JJTON1:REM ELIMINATE
- 9140 A1(KK,LL)=A1(KK,LL)-DD*A1(JJ,LL)
- 9150 NEXTLL
- 9160 B1(KK)=B1(KK)-DD*B1(JJ)
- 9170 NEXTKK
- 9180 NEXTJJ
- 9190 FORJJ=N1TO1STEP-1:REM BACK SUBSTITUTE
- 9200 DD=B1(JJ)
- 9210 IFJJ=N1THEN9250
- 9220 FORKK=JJ+1TON1
- 9230 DD=DD-X1(KK)*A1(JJ,KK)
- 9240 NEXTKK
- 9250 X1(JJ)=DD/A1(JJ,JJ)
- 9260 NEXTJJ
- 9270 RETURN
- 10000 DEFFNA(X)=PEEK(X)+256*PEEK(X+1)
- 10010 P=43:POKE832,PEEK(43):POKE833,PEEK(44)
- 10020 P=FNA(P):IFFNA(P+2)<10000THEN 10020
- 10030 POKE43,PAND255:POKE44,INT(P/256)
- 10040 PRINT "[147]LIBRARY SELECTION":PRINT
- 10050 PRINT"THIS PROGRAM CAN'T BE RESTARTED EXCEPT
- 10060 [153]"BY LOADING FROM DISK OR TAPE"
- 10070 [153]
- 10080 [153]"ANSWER Y OR N FOR EACH OF THE FOLLOWING"
- 10090 [135]X$,M1,N1
- 10100 [139]X$[178]"ZZ"[167]10170
- 10110 [153]"";X$
- 10120 [153]"(LINES";M1;"-";N1;")"
- 10130 [133]A$
- 10140 [139][200](A$,1)[178]"Y"[167]10090
- 10150 [139][200](A$,1)[178]"N"[167][141]10500:[137]10090
- 10160 [153]"ANSWER YES OR NO":[137]10570
- 10170 [153]"AT 'READY' SAVE ON A NEW TAPE OR DISK"
- 10180 [153]"FILE. NOW WAIT FOR READY."
- 10200 [143] COMPACT UP
- 10210 Q[178][165]A(832):P[178][165]A(Q)
- 10220 PT[178][165]A(P):QT[178]Q
- 10230 [139][165]A(P[170]2)[178]10000[167] 10280
- 10240 [151]Q[170]2,[194](P[170]2):[151] Q[170]3,[194](P[170]3)
- 10245 P[178]P[170]4:Q[178]Q[170]4
- 10250 J[178][194](P):[151]Q,J:P[178]P[170]1:Q[178]Q[170]1:[139]J[179][177]0[167]10250
- 10260 [151]QT,Q [175] 255:[151] QT[170]1,[181](Q[173]256)
- 10270 P[178]PT:[137]10220
- 10280 [151]Q,0:[151]Q[170]1,0:Q[178]Q[170]2:[151]834,Q[175]255:[151]835,[181](Q[173]256)
- 10290 [151]43,[194](832):[151]44,[194](833):[151]45,[194](834):[151]46,[194](835):[128]
- 10310 [131]"TOLERANT INPUT",4500,4660
- 10320 [131]"ROBUST INPUT",7000,7090
- 10330 [131]"BIGLETTERS",8000,8200
- 10340 [131]"FORMATTED NUMBER",5000,5130
- 10350 [131]"STRING DISPLAY",5700,5800
- 10360 [131]"BINARY CONVERTER",1000,1060
- 10370 [131]"EXTRACT SURNAME",4100,4200
- 10380 [131]"LIST SEARCH",6000,6050
- 10390 [131]"BUBBLE SORT",6500,6560
- 10400 [131]"QUICKSORT",6200,6380
- 10410 [131]"FRACTION SIMPLIFIER",5500,5630
- 10420 [131]"SIMULTANEOUS EQUATIONS",9000,9270
- 10490 [131]ZZ,0,0
- 10500 PP[178][165]A(832)
- 10510 SS[178][165]A([165]A(PP)[170]2):[139]SS[179][177]M1[167]PP[178][165]A(PP):[137]10510
- 10520 QQ[178][165]A(PP)
- 10530 SS[178][165]A(QQ[170]2):QQ[178][165]A(QQ):[139]SS[179][177]N1[167]10530
- 10540 [151]PP,QQ[175]255:[151]PP[170]1,[181](QQ[173]256):[142]
-